package com.lcf.app.es.model;

import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

/**
 * @author ChenFei
 * @date 2021/12/8
 */
@Data
@Accessors(chain = true)
/**
 * indexName : 存储该实体的索引名称
 * createIndex: 标记是否在存储库引导时创建索引。默认值为true
 * versionType: 版本管理的配置。默认值为EXTERNAL
 */
@Document(indexName = "article")//用于映射到es
/**
 * 设置存入es的类型别名（ ‘_class’ ），默认是包名加类名,可以不设置
 */
//@TypeAlias("Article")
public class Article implements Serializable {

    //id标识
    @Id
    private String id;

    //@Transient 忽略此字段

    /**
     * 字段注解
     * <p>
     * name: 字段名称，因为它将在 Elasticsearch 文档中表示，如果未设置，则使用 Java 字段名称。
     * <p>
     * type：字段类型，可以是Text、Keyword、Long、Integer、Short、Byte、Double、Float、Half_Float、Scaled_Float、Date、Date_Nanos、Boolean、Binary、Integer_Range、Float_Range、Long_Range、Double_Range、Date_Range、Ip_Range、Object之一, 嵌套, Ip, TokenCount, Percolator, Flattened, Search_As_You_Type。请参阅Elasticsearch 映射类型。如果未指定字段类型，则默认为FieldType.Auto。这意味着，没有为该属性写入映射条目，并且 Elasticsearch 将在存储该属性的第一个数据时动态添加映射条目（查看 Elasticsearch 文档了解动态映射规则）。
     * <p>
     * format：一种或多种内置日期格式，请参阅下一节日期格式映射。
     * <p>
     * pattern：一种或多种自定义日期格式，请参阅下一节日期格式映射。
     * <p>
     * store: 标志是否应将原始字段值存储在 Elasticsearch 中，默认值为false。
     * <p>
     * analyzer, searchAnalyzer,normalizer用于指定自定义分析器和规范器。
     */
    @Field(type = FieldType.Text)
    private String title;

    @Field(type = FieldType.Text)
    private String description;

    @Field(type = FieldType.Text)
    private String content;

    @Field(type = FieldType.Integer)
    private Integer readNumber;

}
